/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package org.ejb.persistencia;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author MoisesAntonio
 */
@Entity
@Table(name = "juegos")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Juegos.findAll", query = "SELECT j FROM Juegos j"),
    @NamedQuery(name = "Juegos.findByIdJuego", query = "SELECT j FROM Juegos j WHERE j.idJuego = :idJuego"),
    @NamedQuery(name = "Juegos.findByNombreJuego", query = "SELECT j FROM Juegos j WHERE j.nombreJuego = :nombreJuego"),
    @NamedQuery(name = "Juegos.findByTipo", query = "SELECT j FROM Juegos j WHERE j.tipo = :tipo"),
    @NamedQuery(name = "Juegos.findByPublicado", query = "SELECT j FROM Juegos j WHERE j.publicado = :publicado"),
    @NamedQuery(name = "Juegos.findByEdad", query = "SELECT j FROM Juegos j WHERE j.edad = :edad")})
public class Juegos implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "IdJuego")
    private Integer idJuego;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "NombreJuego")
    private String nombreJuego;
    @Size(max = 10)
    @Column(name = "Tipo")
    private String tipo;
    @Basic(optional = false)
    @NotNull
    @Column(name = "Publicado")
    private boolean publicado;
    @Column(name = "Edad")
    private Integer edad;
    @JoinColumn(name = "Propiedad", referencedColumnName = "NombreUsuario")
    @ManyToOne(optional = false)
    private Usuarios propiedad;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "juegos")
    private Xmljuego xmljuego;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "juegos")
    private List<Binjuego> binjuegoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idJue")
    private List<Favoritos> favoritosList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "juegos")
    private List<Valoraciones> valoracionesList;

    public Juegos() {
    }

    public Juegos(Integer idJuego) {
        this.idJuego = idJuego;
    }

    public Juegos(Integer idJuego, String nombreJuego, boolean publicado) {
        this.idJuego = idJuego;
        this.nombreJuego = nombreJuego;
        this.publicado = publicado;
    }

    public Integer getIdJuego() {
        return idJuego;
    }

    public void setIdJuego(Integer idJuego) {
        this.idJuego = idJuego;
    }

    public String getNombreJuego() {
        return nombreJuego;
    }

    public void setNombreJuego(String nombreJuego) {
        this.nombreJuego = nombreJuego;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public boolean getPublicado() {
        return publicado;
    }

    public void setPublicado(boolean publicado) {
        this.publicado = publicado;
    }

    public Integer getEdad() {
        return edad;
    }

    public void setEdad(Integer edad) {
        this.edad = edad;
    }

    public Usuarios getPropiedad() {
        return propiedad;
    }

    public void setPropiedad(Usuarios propiedad) {
        this.propiedad = propiedad;
    }

    public Xmljuego getXmljuego() {
        return xmljuego;
    }

    public void setXmljuego(Xmljuego xmljuego) {
        this.xmljuego = xmljuego;
    }

    @XmlTransient
    public List<Binjuego> getBinjuegoList() {
        return binjuegoList;
    }

    public void setBinjuegoList(List<Binjuego> binjuegoList) {
        this.binjuegoList = binjuegoList;
    }

    @XmlTransient
    public List<Favoritos> getFavoritosList() {
        return favoritosList;
    }

    public void setFavoritosList(List<Favoritos> favoritosList) {
        this.favoritosList = favoritosList;
    }

    @XmlTransient
    public List<Valoraciones> getValoracionesList() {
        return valoracionesList;
    }

    public void setValoracionesList(List<Valoraciones> valoracionesList) {
        this.valoracionesList = valoracionesList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idJuego != null ? idJuego.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Juegos)) {
            return false;
        }
        Juegos other = (Juegos) object;
        if ((this.idJuego == null && other.idJuego != null) || (this.idJuego != null && !this.idJuego.equals(other.idJuego))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "org.ejb.persistencia.Juegos[ idJuego=" + idJuego + " ]";
    }
    
}
